perm filename NREVER.1[TIM,LSP]1 blob sn#697566 filedate 1983-01-29 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	(declare (fixsw t))
C00006 ENDMK
CāŠ—;
(declare (fixsw t))

(defun xreverse (current)
       (prog (next previous)
	     b     
	     (cond ((null current)(return previous)))
	     (setq next (cdr current))
	     (rplacd current previous)
	     (cond ((null next)(return current)))
	     (setq previous (cdr next))
	     (rplacd next current)
	     (cond ((null previous)(return next)))
	     (setq current (cdr previous))
	     (rplacd previous next)
	     (go b)))

(defun greverse (current)
       (let (x y)
	    (cond ((or (null current)
		       (null 
			(setq x 
			      (cdr current))))
		   current)
		  ((null 
		    (setq y 
			  (cdr x)))
		   (rplaca current
			   (prog1 (car x)
				  (rplaca x
					  (car current))))
		   current)
		  ((null 
		    (cdr y))
		   (rplaca current
			   (prog1 (car y)
				  (rplaca y
					  (car current))))
		    current)
		  (t (prog (next previous first second)
			   (setq first current second x)
			   (setq previous y next x)
			   (setq current (cdr previous))
			   b     
			   (rplacd previous next)
			   (setq next (cdr current))
			   (cond ((null next)
				  (rplaca first
					  (prog1 (car current)
						 (rplaca current
							 (car first))))
				  (rplacd first previous)
				  (rplacd second current)
				  (return first)))
			   (rplacd current previous)
			   (setq previous (cdr next))
			   (cond ((null previous)
				  (rplaca first
					  (prog1 (car next)
						 (rplaca next
							 (car first))))
				  (rplacd first current)
				  (rplacd second next)
				  (return first)))
			   (rplacd next current)
			   (setq current (cdr previous))
			   (cond ((null current) 
				  (rplaca first
					  (prog1 (car previous)
						 (rplaca previous
							 (car first))))
				  (rplacd first next)
				  (rplacd second previous)
				  (return first)))
			   (go b))))))


(defun kreverse (current)
       (prog (next previous)
	     (cond ((null current)(return ())))
	     b     
	     (setq next (cdr current))
	     (rplacd current previous)
	     (cond ((null next)(return current)))
	     (setq previous (cdr next))
	     (rplacd next current)
	     (cond ((null previous)(return next)))
	     (setq current (cdr previous))
	     (rplacd previous next)
	     (cond ((null current)(return previous)))
	     (go b)))